package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Category;
import com.itheima.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author ：sean
 * @date ：Created in 2022/5/19
 * @description ：分类的控制器
 * @version: 1.0
 */
@Slf4j
@RestController
@RequestMapping("/category")
public class CategoryController {

	@Autowired
	private CategoryService categoryService;

	@PostMapping
	// 参数分类实体
	// 第1步：前后端打通，前端数据正确发送到控制器
	public R<String> save(@RequestBody Category category){
		log.info("[分类管理-保存],category:{}",category);
		// 调用业务类的方法完成保存
		categoryService.save(category);
		log.info("[保存成功],id:{}",category.getId());
		return R.success("保存成功");
	}
	// page=1&pageSize=10
	// 确定：方法名，参数，返回值
	@GetMapping("/page")
	public R<Page> page(int page,int pageSize){
		// 构建分页对象，保存当前页码，每页记录数
		Page pageInfo = new Page(page,pageSize);
		log.info("[分类管理-分页列表],page:{}",pageInfo.toString());
		LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
		queryWrapper.orderByAsc(Category::getSort);
		// 第1个参数，为什么传？
		// 第2个参数，查询要求（条件，排序）
		categoryService.page(pageInfo,queryWrapper);
		// page里面有2个，是前端最需要的，自动完成分页展示
		//  records 分页结果集
		//  total 总记录数
		// 返回
		return R.success(pageInfo);
	}

	@DeleteMapping
	public R<String> deleteById(Long id){
		log.info("[分类管理-删除],id:{}",id);
		//调用业务方法，完成业务
		// 准备删除数据时，先检查当前分类下，是发有菜品
		// 准备删除数据时，先检查当前分类下，是发有套餐
		// Mp提供removeById实现不了，我们需自己写业务方法，来自己实现
		//categoryService.removeById(id);
		// 调用业务方法，如果发生了问题，或有任何动作，需要告诉控制器
		categoryService.deleteById(id);
		return R.success("删除成功");
	}

	/**
	 * 更新分类
	 * @param category 请求的数据
	 * @return
	 */
	@PutMapping
	public R<String> update(@RequestBody Category category){
		log.info("[分类管理-更新分类],category:{}",category);
		categoryService.updateById(category);
		return R.success("更新成功");
	}


	@GetMapping("/list")
	// 参数可以实体类，也可以int type
	public R<List<Category>> list(Category category){
		// 打印请求的参数，对调试很重要，狂重要
		log.info("[分类管理-获取分类列表（全部）],category:{}",category);
		// 调用service，获取分类的列表
		LambdaQueryWrapper<Category> lambdaQueryWrapper = new LambdaQueryWrapper<>();
		// select * from category where type = null,显示的时候，需要排序，根据sort升序
		if(category.getType()!=null){
			lambdaQueryWrapper.eq(Category::getType,category.getType());
		}
		lambdaQueryWrapper.orderByAsc(Category::getSort);
		List<Category> list = categoryService.list(lambdaQueryWrapper);
		// 返回一个分类列表数据
		return R.success(list);

	}
}
